-- arena_pick_up
-- Created by dengc
-- 成就：获得角斗对手不同的专属物品

-- 内部函数声明
local whenPickup;

-- 关注事件
EventMgr.register("achievements/arena_pick_up", event.GET_ARENA_ENEMY_ITEM, function(args)
    whenPickup(args);
end);

-- 激活事件的回调
whenPickup = function(args)
    local pos   = args["pos"];
    local bonus = args["bonus"];

    -- 玩家不在地牢中
    if not DungeonM.isInDungeon() then
        return;
    end

    -- 进入的不是竞技场
    if not ArenaM.isInArena() then
        return;
    end

    -- 获得当前格子
    local grids = DungeonM.getCurrentDungeon();
    local grid = grids[pos];

    -- 获取不到奖励
    if not bonus then
        return;
    end

    -- 掉落参数不符合配置
    if type(bonus) ~= "table" and type(bonus[2]) ~= "number" then
        return;
    end

    -- 不是怪物掉落的
    if not grid.monster then
        return;
    end

    -- 不是角斗场BOSS掉落的
    local monsterId = grid.monster.classId;
    local combatSlimeId = ArenaM.getCombatSlimeId();
    if monsterId ~= combatSlimeId then
        return;
    end

    -- 掉落的物品是否和以前相同
    local dropInHistory = ArenaM.getSlimeDropItems() or {};
    local dropItem = bonus[2];
    for _, c in pairs(dropInHistory) do
        if c == dropItem then
            return;
        end
    end

    -- 记录进获得历史
    table.insert(dropInHistory, dropItem);
    ArenaM.setSlimeDropItems(dropInHistory);

    -- 获取当前所在的地牢区域
    local area = DungeonM.getDungeonId();

    -- 遍历所有的子规则
    local ids = AchievementM.getIdsByRule("arena_pick_up");

    for _, id in pairs(ids) do
        -- 已经完成了
        if true == AchievementM.isCompleted(id) then
            return;
        end

        -- 不是该迷宫的成就
        if not AchievementM.isBelongTo(id, area) then
            return;
        end

        -- 尝试完成成就
        AchievementM.tryComplete(id, 1);
    end
end

return {

};
